package fisio.control;

import java.io.IOException;
import java.util.Vector;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import net.sf.json.JSONArray;

import fisio.global.Const;
import fisio.global.Util;
import fisio.model.Compromisso;
import fisio.model.Fisioterapeuta;
import fisio.service.ServicoCompromisso;

public class AgendaServlet extends HttpServlet{

	private static final long serialVersionUID = 1L;

	@Override
	protected void doGet(HttpServletRequest request, HttpServletResponse response)
	throws ServletException, IOException {	
		
		String op = request.getParameter("op");
		
		if(op != null) {
			
			if(op.equals("listar")) {

				Vector<Compromisso> temp = null;
				Fisioterapeuta f = (Fisioterapeuta)request.getSession().getAttribute("usuario");
				
				String tipo = request.getParameter("tipo");
				
				if(tipo != null) {	
				
					if(tipo.equals("hoje")) {					
						temp = ServicoCompromisso.getCompromissosFisioterapeutaHoje(f);
						
					} else if(tipo.equals("semana")) {					
						temp = ServicoCompromisso.getCompromissosFisioterapeutaSemana(f);
						
					} else if(tipo.equals("mes")) {
						temp = ServicoCompromisso.getCompromissosFisioterapeutaMes(f);
						
					} else if(tipo.equals("periodo")) {				
						String dataI = request.getParameter("dataInicio");
						String dataF = request.getParameter("dataFim");
						temp = ServicoCompromisso.getCompromissosFisioterapeutaPeriodo(f, Util.createDateFromDateHours(dataI, "00:00"), Util.createDateFromDateHours(dataF, "23:59"));
					
					} else
						System.out.println("\nERRO: tipo indefinido na listagem de compromissos: "+tipo);
				
				} else
					temp = ServicoCompromisso.getCompromissosFisioterapeuta(f);
				
				JSONArray array = new JSONArray();
				
				for(int i = 0; i < temp.size(); i++)
					array.add(temp.get(i).toJSON());
				
				request.getSession().setAttribute("tabAtiva", "#tabAgenda");
				response.setContentType("application/json");
				response.getWriter().print(array);
				
			} else if(op.equals("editar")) {
				
				Fisioterapeuta f = (Fisioterapeuta)request.getSession().getAttribute("usuario");
				String id_c = request.getParameter("id");
				Compromisso c = ServicoCompromisso.getCompromisso(Integer.parseInt(id_c));
				
				if(c.getIdF() == f.getId() || f.temPerfilAdmin()) {
					request.setAttribute("compromisso", c);
					request.getRequestDispatcher(Const.JSP_CAD_COMPROMISSO).forward(request, response);					
				
				} else				
					response.sendRedirect(Const.CONTEXT);
				
			} else
				response.sendRedirect(Const.CONTEXT);
			
		} else
			response.sendRedirect(Const.CONTEXT);
	}

	@Override
	protected void doPost(HttpServletRequest request, HttpServletResponse response)
	throws ServletException, IOException {
		
		String op = request.getParameter("op");
		
		if(op != null) {
			
			int id_f = ((Fisioterapeuta)request.getSession().getAttribute("usuario")).getId();
			String id = request.getParameter("id");
			String id_p = request.getParameter("id_p");
			boolean check_p = Boolean.parseBoolean(request.getParameter("check_pac"));
			String data = request.getParameter("data");
			String horario = request.getParameter("horario");
			String descricao = request.getParameter("descricao");
		
			if(op.equals("deletar")) {
				
				Fisioterapeuta f = (Fisioterapeuta)request.getSession().getAttribute("usuario");
				Compromisso c = ServicoCompromisso.getCompromisso(Integer.parseInt(id));				
				
				if(f.getId() == c.getIdF() || f.temPerfilAdmin()) {
					ServicoCompromisso.deleteCompromisso(Integer.parseInt(id));
				}
			
			} else if(op.equals("editar")) {
				
				Fisioterapeuta f = (Fisioterapeuta)request.getSession().getAttribute("usuario");
				Compromisso c = ServicoCompromisso.getCompromisso(Integer.parseInt(id));				
				
				if(f.getId() == c.getIdF() || f.temPerfilAdmin()) {
					ServicoCompromisso.updateCompromisso(c.getId(), new Compromisso(id_f,(check_p)?Integer.parseInt(id_p):(-1),Util.createDateFromDateHours(data, horario),descricao));
					response.sendRedirect(Const.PAGE_HOME_LOGADO);
				}
				
			} else if(op.equals("cadastrar")) {
				
				System.out.println(horario);
				Compromisso in = new Compromisso(id_f,(check_p)?Integer.parseInt(id_p):(-1),Util.createDateFromDateHours(data, horario),descricao);
				if (ServicoCompromisso.verificaDisponibilidade(in)) ServicoCompromisso.insertCompromisso(in);
				response.sendRedirect(Const.PAGE_HOME_LOGADO);
				
			} else
				
				response.sendRedirect(Const.CONTEXT);
			
		} else {
		
			response.sendRedirect(Const.CONTEXT);
		
		}
	}
}
